//
//  YTFUserViewModel.swift
//  sinaWeibo
//
//  Created by pro on 16/2/27.
//  Copyright © 2016年 pro. All rights reserved.
//

import UIKit
import AFNetworking

class YTFUserViewModel: NSObject {
    
    //创建一个单例
    static let shareInstance = YTFUserViewModel()
    
    //根据MVVM的设计原理，将模型定义在这里
    var model: YTFUserModel?
    
    //定义一个属性，并实现它的get方法
    var access_token: String? {
        
        return model?.access_token
    
    }
    
    
    //定义一个属性来判断是否登录
    var isLogin: Bool? {
        return model?.access_token == nil ? false : true
    }
    
    //重写构造方法
    override init() {
        model = YTFUserModel.readObject("userInfo.abc")
    }
    
    
    //定义一个获取token的方法
    func loadToken(code: String, success: ()->(),failure: ()->()){
        
        //实例化一个管理者
        let manager = AFHTTPSessionManager()
        
        manager.responseSerializer.acceptableContentTypes?.insert("text/plain")
        
        //配置请求参数
        /*
        请求参数
        必选 	类型及范围 	说明
        client_id 	true 	string 	申请应用时分配的AppKey。
        client_secret 	true 	string 	申请应用时分配的AppSecret。
        grant_type 	true 	string 	请求的类型，填写authorization_code
        
        grant_type为authorization_code时
        必选 	类型及范围 	说明
        code 	true 	string 	调用authorize获得的code值。
        redirect_uri 	true 	string 	回调地址，需需与注册应用里的回调地址一致。
        */
        let params = ["client_id":App_KEY,
            "client_secret":APP_SECERT,
            "grant_type":"authorization_code",
            "code":code,
            "redirect_uri":App_URL
        ]
        
        //        print(params)
        
        //发送一个POST请求
        manager.POST("https://api.weibo.com/oauth2/access_token", parameters: params, progress: nil, success: { (_ , JSON) -> Void in
            
            print(JSON)
            //字典转模型
            //判断式子里面不能对JSON进行强制解包，这样可能会导致奔溃,使用if let
            if let dict = JSON as? [String:NSObject]{
                let userModel = YTFUserModel(dict: dict)
                
                print(userModel.access_token)
                print(userModel.profile_image_url)
                print(userModel.screen_name)
                print(userModel.expires_date)

                
                //在闭包里面，调用方法需要使用self
                self.getPersonInfo(userModel, success: success, failure: failure)
            }
            
            
            }) { (_ , error) -> Void in
                
                print(error)
                
        }
        
        
    }

    
    func getPersonInfo(userModel: YTFUserModel,success: ()->(), failure: ()->()){
        
        //实例化一个管理者
        let manager = AFHTTPSessionManager()
        
        //设置请求参数
        /*
        必选 	类型及范围 	说明
        access_token 	true 	string 	采用OAuth授权方式为必填参数，OAuth授权后获得。
        uid 	false 	int64 	需要查询的用户ID。
        screen_name 	false 	string 	需要查询的用户昵称。
        
        注意事项
        参数uid与screen_name二者必选其一，且只能选其一；
        接口升级后，对未授权本应用的uid，将无法获取其个人简介、认证原因、粉丝数、关注数、微博数及最近一条微博内容。
        */
        let params = [
            "access_token":userModel.access_token ?? "",
            "uid":userModel.uid ?? ""
        ]
        
        //发送get请求
        manager.GET("https://api.weibo.com/2/users/show.json", parameters: params, progress: nil, success: { (_, JSON) -> Void in
            print(JSON)
            
            if let dict = JSON as? [String:NSObject] {
                
                userModel.profile_image_url = dict["profile_image_url"] as? String
                userModel.screen_name = dict["screen_name"] as? String
                
                //保存到沙盒中
                userModel.saveUserInfo("userInfo.abc")
                
                
            }
            
            success()
            
            }) { (_, error) -> Void in
                print(error)
                failure()
        }
        
    }

    
    
}
